package com.wenyl.linear.stack;

import lombok.Data;

/**
 * @author Swimming Dragon
 * @description: 数组实现栈，后进先出的栈，元素从数组后面依次入栈，注意空栈返回-1
 * @date 2024年10月17日 15:41
 */
@Data
public class ArrayStack {
    private int[] stack;
    // 栈顶元素下标
    private int topIndex;
    // 栈的当前元素个数
    private int size;
    // 设置一个栈的默认容量
    public static final int MAX_STACK_SIZE = 10;
    public ArrayStack(){
        stack = new int[MAX_STACK_SIZE];
        topIndex = -1;
    }

    public boolean isEmpty(){
        return getSize() == 0;
    }

    /**
     * 数据入栈
     * @param data 数据
     */
    public void push(int data){
        if(getSize() == MAX_STACK_SIZE){
            System.out.println("栈满");
            return;
        }
        stack[++topIndex] = data;
        size++;
    }

    /**
     * 栈顶元素出栈
     */
    public int pop(){
        if(isEmpty()){
            System.out.println("栈空");
            return -1;
        }
        size--;
        return stack[topIndex--];
    }

    /**
     * 按入栈顺序依次遍历
     */
    public void printAsPush(){
        for(int i=0;i<=topIndex;i++){
            System.out.print(stack[i]+" ");
        }
        System.out.println();
    }

    /**
     * 按出栈顺序依次遍历
     */
    public void printAsPop(){
        for(int i=topIndex;i>=0;i--){
            System.out.print(stack[i]+" ");
        }
        System.out.println();
    }

}
